//Copyright (C) 1998-2008, Sumisho Computer Systems Corp. All Rights Reserved.

//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at

//http://www.apache.org/licenses/LICENSE-2.0

//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.

/**
 * @author Hitoshi Okada
 */

package com.curlap.orb.io;

import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * CurlSerializer
 */
public class CurlSerializer extends AbstractSerializer
{

    private final Log log = LogFactory.getLog(CurlSerializer.class);

    // constructor
    public CurlSerializer()
    {
        super();
    }

    @Override
    public void serialize(Object obj, OutputStream ostream) throws SerializerException 
    {
        SerializableStreamWriter writer = null;
        try
        {
            log.trace("serialized object " + obj);
            writer = new CurlSerializableStreamWriter(ostream);
            writer.write(obj);
        }
        finally
        {
            if (writer != null)
                writer.close();
        }
    }

    @Override
    public Object deserialize(InputStream istream) throws SerializerException
    {
        SerializableStreamReader reader = null;
        Object obj = null;
        try
        {
            reader = new CurlSerializableStreamReader(istream);
            obj = reader.read();
            log.trace("deserialized object " + obj);
        }
        finally
        {
            if (reader != null)
                reader.close();
        }
        return obj;
    }
}
